Python爬虫
网页代码是下面这样的, 要怎么写正则表达式才能提取到250mW?我这样写 re.compile(r'<td class=" ">(\d*)mW</td>',re.S), 结果是空值
<td class=" ">
250
mW
</td> \d+不就可以吗 wp231957 发表于 2021-5-10 17:21
\d+不就可以吗
可以麻烦写完整的语句吗? 谢谢! 本帖最后由 hrp 于 2021-5-10 17:41 编辑
空格和换行你没算进去
写个丑陋的代码{:10_245:}
import re
s = """<td class=" ">
250
mW
</td>"""
p = re.compile(r'<td class=" ">[\s\n]*(\d*)[\s\n]*mW[\s\n]*</td>',re.S)
r = p.search(s)
print(r.group(1))
hrp 发表于 2021-5-10 17:40
空格和换行你没算进去
写个丑陋的代码
谢谢!
那像这样的 两个相同的标签, 要提取的值也没有特殊的模式, 要怎么写啊
#1
<td class=" ">
SURFACE MOUNT
</td>
#2
<td class=" ">
SMT
</td> grey_lemon 发表于 2021-5-10 17:51
谢谢!
那像这样的 两个相同的标签, 要提取的值也没有特殊的模式, 要怎么写啊
说说你到底要干嘛,一般class没有设置为空的 wp231957 发表于 2021-5-10 19:00
说说你到底要干嘛,一般class没有设置为空的
这里要分别提取SURFACE MOUNT(#1) 和 SMT(#2)
总的目的要爬取这个网站上各个Part Number的参数信息
https://www.findchips.com/parametric/Resistors/Fixed%20Resistors?sort=false&page=
用BeautiSoup提取html标签内的内容 {:5_95:} 利用head 伪装之后运行后显示 403 Forbidden, 还有办法爬吗?
谢谢!
def askURL(url):
head = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, likeGecko) Chrome/90.0.4430.93 Safari/537.36 Edg/90.0.818.51"
}
request = urllib.request.Request(url,headers=head)
html = ""
grey_lemon 发表于 2021-5-11 08:45
利用head 伪装之后运行后显示 403 Forbidden, 还有办法爬吗?
谢谢!
网站是这个
https://www.digikey.cn/en/products/filter/through-hole-resistors/53 grey_lemon 发表于 2021-5-10 20:49
这里要分别提取SURFACE MOUNT(#1) 和 SMT(#2)
总的目的要爬取这个网站上各个Part Number的参数信息
import requests
from lxml import etree
url="https://www.findchips.com/parametric/Resistors/Fixed%20Resistors?sort=false&page="
res=requests.get(url)
tree = etree.HTML(res.text)
data = tree.xpath("//table[@id='j-parametric-table']/tbody/tr")
for x in range (1,len(data)+1):
col=tree.xpath("//table[@id='j-parametric-table']/tbody/tr[%d]/td"%x)
for y in range(8,len(col)+1):
txt=tree.xpath("//table[@id='j-parametric-table']/tbody/tr[%d]/td[%d]"%(x,y))
print(txt.text.strip()) wp231957 发表于 2021-5-11 08:51
谢谢!做了两处修改, 麻烦帮忙增加一些功能
#1 对url 加了个for 循环, 因为网站是可以在最后加数字来翻页, 是想把所有页码(第1页到第50页)的参数信息都提取出来。
运行之后没有变化。。
#2for y in range(8,len(col)+1): 改为从第一列开始提取for y in range(0,len(col)+1):
运行之后没有变化 。。
#3 能否实现把爬取到的信息列为类似网站显示的有标题栏的excel 的格式
import requests
from lxml import etree
url="https://www.findchips.com/parametric/Resistors/Fixed%20Resistors?sort=false&page="
for i in range(0,3):
url = url + str(i)
res=requests.get(url)
tree = etree.HTML(res.text)
data = tree.xpath("//table[@id='j-parametric-table']/tbody/tr")
for x in range (1,len(data)+1):
col=tree.xpath("//table[@id='j-parametric-table']/tbody/tr[%d]/td"%x)
for y in range(0,len(col)+1):
txt=tree.xpath("//table[@id='j-parametric-table']/tbody/tr[%d]/td[%d]"%(x,y))
print(txt.text.strip())
wp231957 发表于 2021-5-11 08:51
顺便问下pycharm代码怎么复制能粘贴为你这样的格式。。 grey_lemon 发表于 2021-5-11 16:59
谢谢!做了两处修改, 麻烦帮忙增加一些功能
#1 对url 加了个for 循环, 因为网站是可以在最后加数字 ...
没有分析网页源码吗?还是不会呢,头七列和后面的格式不一样,pycharm没用过 wp231957 发表于 2021-5-12 06:53
没有分析网页源码吗?还是不会呢,头七列和后面的格式不一样,pycharm没用过
刚开始学爬虫, 所以很多都是一知半解, 打算从实例深度学习。
谢谢啦 grey_lemon 发表于 2021-5-11 16:59
谢谢!做了两处修改, 麻烦帮忙增加一些功能
#1 对url 加了个for 循环, 因为网站是可以在最后加数字 ...
给你写了一个txt版本的,xls版本的你要是用 自己研究一下,
import requests,re
from lxml import etree
f=open("record.txt","w",encoding="utf-8")
for page in range(1,51):
print("...............正在处理第 %d 页数据............"%page)
url="https://www.findchips.com/parametric/Resistors/Fixed%20Resistors?sort=false&page="+str(page)
res=requests.get(url)
tree = etree.HTML(res.text)
data = tree.xpath("//table[@id='j-parametric-table']/tbody/tr")
for x in range (1,len(data)+1):
col=data.xpath("./td")
try:
three=col.xpath("./a/div/text()").strip()+""
except:
three=""
try:
three+=col.xpath("./span/text()").strip()
except:
three=three
try:
five=col.xpath("./a/text()").strip()
except:
five=""
try:
seven=col.xpath("./text()").strip()
except:
seven=""
line=three+","+five+","+seven+","
for y in range(8,len(col)+1):
line+=re.sub(" +"," ",col.text.strip().replace("\n",""))+","
f.write(line[:-1]+"\n")
line=""
f.close()
print("ok") wp231957 发表于 2021-5-12 16:22
给你写了一个txt版本的,xls版本的你要是用 自己研究一下,
非常感谢! 我自己来研究一下试试 请教一下
我用以下代码结果运行后错误提示
403
Forbidden
是不是被识别出来是爬虫了? 已经用head 伪装过了, 还能用其他办法爬吗?
# -- coding = 'utf-8' --
from bs4 import BeautifulSoup
import re
import urllib.request, urllib.error
import xlwt
import sqlite3
def main():
baseurl = "https://www.digikey.cn/en/products/filter/through-hole-resistors/53?s=N4IgrCBcoA5QjAGhDOl4AYMF9tA"
datalist = getData(baseurl)
savepath = ".\\Digikey.xls"
#saveData
askURL("https://www.digikey.cn/en/products/filter/through-hole-resistors/53?s=N4IgrCBcoA5QjAGhDOl4AYMF9tA")
def getData(baseurl):
datalist = []
return datalist
def askURL(url):
head = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, likeGecko) Chrome/90.0.4430.93 Safari/537.36 Edg/90.0.818.51"
}
request = urllib.request.Request(url,headers=head)
html = ""
try:
response = urllib.request.urlopen(request)
html = response.read().decode("utf-8")
print(html)
except urllib.error.URLError as e:
if hasattr(e,"code"):
print(e.code)
if hasattr(e,"reason"):
print(e.reason)
# return html
def saveData(savepath):
print("save...")
if __name__ == "__main__":
main() grey_lemon 发表于 2021-5-13 07:57
请教一下
我用以下代码结果运行后错误提示
你这也不是那个网站了,我17楼代码是测试成功的
页:
[1]
2