findpython3
Ⅰ python3 数据查找
import re
#将f指定为你的txt文件的路径
f='t.txt'
fo=open(f)
reg=r'<\s*(\S+)\s*@'
users=re.findall(reg,fo.read())
print(users)
fo.close()
Ⅱ linux系统下python3和python2用的是一个文件夹来放置模块吗
肯定是相互独立的,你可以在/usr/local/lib目录下查看是否有python3.x的目录
如果没有可以试试下面的:
importsite
foriinsite.getsitepackages():
print(i)
里面应该有你需要的目录
Ⅲ Python find()方法,若指定了范围,start=1,那包含位置为1这的个字符吗
info为字符串 "abca",而print info.find('3')的意思是查找字符串"abca"中的 字符"3",而不是查找字符串"abca"中索引号为3的字符。
"abca"中不包含"3"当然返回-1。
Ⅳ 请问python3中的re.split与re.findall的区别
你的Python程序输出结果是对的.
re.split是以re.compile中的正则表达式对字符串进行切分.
re.findall是以re.compile中的正则表达式对字符串进行匹配.
就拿你的例子来说吧,
re.split是以数字为边界对字符串'one1two2three3four4'进行切分,得到['one','two','three','four','']五个字符串
re.findall是匹配字符串'one1two2three3four4'中的所有数字,得到['1','2','3','4']四个数字
Ⅳ 如何使用python3爬取1000页百度百科条目
1 问题描述
起始页面 ython包含许多指向其他词条的页面。通过页面之间的链接访问1000条网络词条。
对每个词条,获取其标题和简介。
可以看出,其他词条的格式都遵循hcom/item/xxx的形式
3 实现
# coding=utf-8from urllib import requestfrom bs4 import BeautifulSoupimport reimport tracebackimport time
url_new = set()
url_old = set()
start_url = 'httpm/item/python'max_url = 1000def add_url(url):
if len(url_new) + len(url_old) > 1000: return
if url not in url_old and url not in url_new:
url_new.add(url)def get_url():
url = url_new.pop()
url_old.add(url) return urldef parse_title_summary(page):
soup = BeautifulSoup(page, 'html.parser')
node = soup.find('h1')
title = node.text
node = soup.find('div', class_='lemma-summary')
summary = node.text return title, summarydef parse_url(page):
soup = BeautifulSoup(page, 'html.parser')
links = soup.findAll('a', href=re.compile(r'/item/'))
res = set()
keprefix = 'htt..com'
for i in links:
res.add(keprefix + i['href']) return resdef write2log(text, name='d:/ke-urllib.log'):
with open(name, 'a+', encoding='utf-8') as fp:
fp.write('
')
fp.write(text)if __name__ == '__main__':
url_new.add(start_url) print('working')
time_begin=time.time()
count = 1
while url_new:
url = get_url() try:
resp = request.urlopen(url)
text = resp.read().decode()
write2log('.'.join(parse_title_summary(text)))
urls = parse_url(text) for i in urls:
add_url(i) print(str(count), 'ok')
count += 1
except:
traceback.print_exc() print(url)
time_end=time.time() print('time elapsed: ', time_end - time_begin) print('the end.')
输出结果
working1 ok
略983 ok984 ok
time elapsed: 556.4766345024109the end.
将urllib替换为第三方库requests:
pip install requests
略if __name__ == '__main__':
url_new.add(start_url) print('working')
time_begin = time.time()
count = 1
while url_new:
url = get_url() try: with requests.Session() as s:
resp = s.get(url)
text = resp.content.decode() # 默认'utf-8'
write2log('.'.join(parse_title_summary(text)))
urls = parse_url(text) for i in urls:
add_url(i) print(str(count), 'ok')
count += 1
except:
traceback.print_exc() print(url)
time_end = time.time() print('time elapsed: ', time_end - time_begin) print('the end.')
输出
略986 ok987 ok988 ok989 ok
time elapsed: 492.8088216781616the end.
一个通用的爬虫架构包括如下四部分:
调度器
URL管理器
网页下载器
网页解析器
- $ ls html_downloader.py html_outputer.py html_parser.py spider_main.py url_manager.py
- # coding=utf-8from ex.url_manager import UrlManagerfrom ex.html_downloader import HtmlDownloaderfrom ex.html_parser import HtmlParserfrom ex.html_outputer import HtmlOutputerimport traceback, timeclass SpiderMain():
- def __init__(self):
- self.urls = UrlManager() self.downloader = HtmlDownloader() self.parser = HtmlParser() self.outputer = HtmlOutputer() def crawl(self, url):
- self.urls.add_url(url)
- count = 1
- while self.urls.is_has_url():
- url = self.urls.get_url() try:
- page = self.downloader.download(url)
- data, newurls = self.parser.parse(page) self.urls.add_urls(newurls) self.outputer.write2log(data) print(str(count), 'ok') except:
- traceback.print_exc() print(str(count), 'failed')
- count += 1if __name__ == '__main__':
- spider = SpiderMain()
- start_url = 'hti.com/item/python'
- print('crawling')
- time_begin = time.time()
- spider.crawl(start_url)
- time_end = time.time() print('time elapsed:', time_end - time_begin)
- # coding=utf-8class UrlManager():
- def __init__(self, maxurl=1000):
- self.url_new = set() self.url_old = set() self.max_url = maxurl def add_url(self, url):
- assert isinstance(url, str) if len(self.url_new) + len(self.url_old) > self.max_url: return
- if url not in self.url_new and url not in self.url_old: self.url_new.add(url) def add_urls(self, urls):
- if len(self.url_new) + len(self.url_old) > self.max_url: return
- for u in urls: self.add_url(u) def get_url(self):
- t = self.url_new.pop() self.url_old.add(t) return t def is_has_url(self):
- return self.url_new
- # coding=utf-8import requestsclass HtmlDownloader():
- def download(self, url):
- resp = requests.get(url) return resp.content.decode()
- # coding=utf-8from bs4 import BeautifulSoupimport reclass HtmlParser():
- def __init__(self, keprefix = 'htti.com'):
- self.keprefix = keprefix def parse(self, page):
- soup = BeautifulSoup(page, 'html.parser')
- node = soup.find('h1')
- title = node.text
- node = soup.find('div', class_='lemma-summary')
- summary = node.text
- data = title + summary
- nodes = soup.findAll('a', href=re.compile(r'/item/'))
- urls = set() for i in nodes:
- urls.add(self.keprefix + i['href']) return data, urls
- # coding=utf-8class HtmlOutputer():
- def write2log(self, text, name='d:/ke-oop.log'):
- with open(name, 'a+', encoding='utf-8') as fp:
- fp.write(' ')
- fp.write(text)
从以上函数式的写法也可以看出了。
下面是面向对象的写法。
1、spider main
2、URL manager
3、html downloder
4、html parser
5、 html outputer
Ⅵ python find什么意思
find 方法是字符串类型对象带有的方法;
它可以从一个字符串中,找到另一个字符串;
如果找到了,则返回索引;
如果没有找到,则返回 -1;
代码:
str1 = "this is string example....wow!!!"
str2 = "exam"
print('
', str1.find(str2))
运行效果:
Ⅶ Python3 请问这个代码哪里错了
这个可能是类型的问题。你将input()改成raw_input()就可以解决问题。
不过似乎python3没有raw_input了。
你检查一下你的state=input()中的类型。
print (type(state))
你再对比一个你的cities中的keys的类型
print(type((cities.keys())[0]))
printcities['CA']
--
如果两者的类型有差异,你就需要转换一下。
比如将state转换一下
state=str(state)
此外你输入的时候,有没有加引号? 这个也是要考虑的问题。
刚刚在linux上安装了一个python3,我测试的结果是,你输入state时,不要加引号。比如直接输入大写的CA就会出San Francisco
程序没有问题。只是python2与python3输入的时候,python2需要引号,python3不需要。
Ⅷ python 里 find函数怎么用
题主最好给出一个稍微具体点的应用场景,可能有更加优化的方法。 我自己构造一个简单的例子如下: matlab: A = find(B>0) python: A = [i for i in range(len(B)) if B[i]>0] 另外注意,matlab里的数组索引从1开始,和python不同。
Ⅸ 解释python中.find(" ")函数的作用:
python中遇到不明白的地方,可以试试help
这里要查看find的作用,可以键入help(str.find),然后得到提示如下:
Helponmethod_descriptor:
find(...)
S.find(sub[,start[,end]])->int
,
suchthatsubiscontainedwithinS[start:end].Optional
.
Return-1onfailure.
解释要点大致如下:
find()方法检测字符串S中是否包含子字符串sub,如果指定start(开始) 和 end(结束)范围,则检查是否包含在指定范围内,如果包含子字符串返回开始的索引值(如果包含多个字串,只返回最左边出现的索引值),查找失败返回-1。以本题为例:
s="abcd1234"
s.find("cd"),在字符串s中查找字串"cd"第一次出现时s中的索引值,因为索引从0开始,所以结果为2,注意s中出现多次cd的情况,例如:
s="abcd1234cd"
s.find("cd")的结果依然是2,找不到时返回-1,比如:
s="1234"
s.find("cd")的结果为-1
Ⅹ 用python3分别写出一个类似find和grep功能的函数
grep用的少,不熟悉,给个find的你参考一下吧
#!/usr/bin/envpython3.6
importos
importsys
deffind(args=sys.argv):
ignore='-i'inargs
dirname='.'ifargs[1].startswith('-')elseargs[1]
fname=args[args.index('-name')+1].strip('"'')
forr,ds,fsinos.walk(dirname):
forfninfs:
iffn==fnameor(ignoreandfn.lower()==fname.lower()):
print(os.path.join(r,fn))
defmain():
find()
if__name__=='__main__':
main()