python 的re.findall的Bug以及解决方法
通过以下截图便可以看出来我们本来是要解析网址的,后来他莫名其妙的给我们打印出来字符!!!这样写大体上没有什么问题!但是好像等这个数据量变大之后这个模块的。把我们使用的findall方法换成,,获取值时再使用.group()解决方案是更换方法使用。
目录
问题代码
这样写大体上没有什么问题!但是好像等这个数据量变大之后这个模块的解析函数(findall)便会出现问题!属于不太容易发现的Bug
reall = re.findall(p2, res2.text)
for eq in reall:
print(eq)
问题截图
通过以下截图便可以看出来我们本来是要解析网址的,后来他莫名其妙的给我们打印出来一些字符!!!
问题解决
解决方案是更换方法使用
把我们使用的findall方法换成,finditer方法,获取值时再使用.group()
reall = re.finditer(p2, res2.text)
for eq in reall:
print(eq.group())
解决截图
顺便复制一下问题代码
def getimg():
global num, dbsum, startLength, twoLength, html_href
tag_list, href_list, href_list_two = [], [], []
for i in range(startLength, twoLength):
initUrl = "https://www.coserba.net/cosplay/page/" + str(i)
print(initUrl)
try:
res = requests.get(initUrl, headers=headers, timeout=4)
except:
print("正在从")
time.sleep(random.uniform(2, 3))
res = requests.get(initUrl, headers=headers, timeout=4)
try:
if res.status_code == 200:
p1 = r"https://www.coserba.net/\d{1,10}.html"
res1 = re.findall(p1, res.text)
set1 = set(res1)
l1 = list(set1)
for ll1 in l1:
res2 = requests.get(ll1, headers=headers)
print(res2.text)
p2 = r'https://pic.imgdb.cn/item/(\d|\w){1,}.jpg'
reall = re.findall(p2, res2.text)
for eq in reall:
print(eq)
href_list.append(eq)
tag_list.append("NULL")
except:
print("出错了")data = []
for s in range(len(href_list)):
data.append({"tag": tag_list[s], "url": href_list[s]})
conn = pymongo.MongoClient("mongodb://localhost/20771")
db = conn["Picture"]
table = db["www.coserba.net"]
if data:
table.insert_many(data)
print("第" + str(dbsum) + "次插入数据库")
dbsum = dbsum + 1tag_list.clear()
href_list.clear()
data.clear()
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)