<a class="item" href="/H/.*.</a> 正则表达式改为</a>只出现一次
时间: 2023-08-14 17:25:25 浏览: 93
你的要求是将正则表达式<a class="item" href="/H/.*.</a>改为<a class="item" href="/H/.*.</a>只出现一次,请确认是否正确理解。如果是的话,可以使用以下正则表达式来匹配只出现一次的<a>标签:
```
<a\b(?:(?!\bhref\b).)*?\bhref\s*=\s*(['"]?)(?!#)\S+\1(?:(?!\bhref\b).)*?>.*?<\/a>
```
这个正则表达式会匹配一个完整的<a>标签,其中href属性的值必须是一个非空字符串,且<a>标签只能出现一次。
相关问题
用正则表达式爬取京东图书销量榜(https://book.jd.com/booktop/0-0-0.html)上所有图书的以下信息: (1) 书名——bookName (2) 作者——author (3) 定价——definePrice (4) 折扣——discount (5) 售价——sellPrice 并将以上信息保存到excel文档中。
好的,这是一个比较复杂的任务,需要用到爬虫和数据处理的知识。我将给你提供一个基本的思路:
1. 发送 HTTP 请求获取京东图书销量榜的网页源代码。
2. 使用正则表达式从源代码中提取书名、作者、定价、折扣和售价等信息。
3. 将提取的信息存储到一个数据结构中,比如列表或字典。
4. 使用 Python 中的 pandas 库将数据结构转化为 DataFrame 对象。
5. 将 DataFrame 对象保存为 Excel 文件,可以使用 pandas 的 to_excel() 方法。
下面是一个示例代码供你参考:
```python
import requests
import re
import pandas as pd
# 发送 HTTP 请求获取京东图书销量榜的网页源代码
url = 'https://book.jd.com/booktop/0-0-0.html'
response = requests.get(url)
html = response.text
# 使用正则表达式从源代码中提取书名、作者、定价、折扣和售价等信息
pattern = r'<div class="p-name">.*?<em>(.*?)</em>.*?<a href=".*?" title="(.*?)".*?</a>.*?<div class="p-bookdetails">.*?<span class="price">(.*?)</span>.*?<div class="p-commit">.*?<strong>(.*?)</strong>.*?<span class="sep">¥</span><strong class="J_price">(.*?)</strong>'
items = re.findall(pattern, html, re.S)
# 将提取的信息存储到一个数据结构中,比如列表或字典
data = []
for item in items:
bookName, author, definePrice, discount, sellPrice = item
data.append({
'书名': bookName.strip(),
'作者': author.strip(),
'定价': definePrice.strip(),
'折扣': discount.strip(),
'售价': sellPrice.strip()
})
# 使用 Python 中的 pandas 库将数据结构转化为 DataFrame 对象
df = pd.DataFrame(data)
# 将 DataFrame 对象保存为 Excel 文件
df.to_excel('京东图书销量榜.xlsx', index=False)
```
注意,这个示例代码只是一个基本的框架,你可能需要根据实际情况进行一些修改和优化。另外,爬取网页数据需要注意法律法规和伦理道德,不要进行非法或有害的行为。
解释代码 for item in all_poptrend: if count > 15: break js1 = json.loads(item['v']) ##js1用于取bjlineSmall标签中json对象形式数据 item_sitename = js1['sitename'] ##商品来自哪个电商平台 item_price = js1['price'] ##商品当前价格 item_img = item.div.a.img['src'] ##商品图标地址 name1 = item.find("div", class_="title").div.a item_name = "" ##商品标题 for ti in p4title.findall(str(name1)): item_name = item_name + ti ##拼接商品标题 item_name = item_name.replace('<', '') ##去除商品标题中的多余符号 item_name = item_name.replace('>', '') item_name = item_name.replace(' ', '') item_url = item.find("span", class_="poptrend").a['href'] ##比价地址 item_json = {"name": item_name, "img": item_img, "price": item_price, "sitename": item_sitename, "url": item_url} result.append(item_json) count = count + 1
这段代码是一个for循环,遍历列表all_poptrend中的元素。其中,count是一个计数器,如果count大于15,则跳出循环。每次遍历一个元素,都会解析其中的json数据,获取商品的名称、价格、来源平台、图片地址、比价地址等信息,并将这些信息封装成一个字典类型的item_json。最后,将这个字典添加到result列表中,并将计数器count加1。
代码中有一些变量的命名不太规范,比如all_poptrend、js1等,建议修改为更具有可读性和表达能力的变量名。另外,代码中使用了正则表达式来解析商品标题,但没有给出p4title的定义和解释,需要添加注释来说明。
阅读全文